package com.java.day04.arr;

/**
 * 数组的一些方法和属性
 * 属性:
 * arr.length   数组长度
 *
 * 方法:
 * 1.拷贝:
 * Arrays.copyOf(原数组, 新数组的长度(+i/-i)); 可以扩容,并且可以不用创建新数组
 * System.arraycopy(原数组,原数组起始位置,新数组,新数组起始位置,需要拷贝的长度);
 *
 *2.排序:
 * Arrays.sort(数组名);
 */





public class ArrUtils {
    /**
     * 打印整型数组
     * @param arr
     */
    public static void printArrInt(int[] arr){
        System.out.print("[ ");
        for (int i = 0; i < arr.length; i++) {
            if(i==arr.length-1){
                System.out.print(arr[i]);
                break;
            }
            System.out.print(arr[i]+",");
        }
        System.out.println(" ]");
    }

    /**
     * 打印字符串类型数组
     * @param arr
     */
    public static void printArrString(String[] arr){
        System.out.print("[ ");
        for (int i = 0; i < arr.length; i++) {
            if(i==arr.length-1){
                System.out.print(arr[i]);
                break;
            }
            System.out.print(arr[i]+",");
        }
        System.out.println(" ]");
    }

    /**
     * 求数组的最大值
     * @param arr
     * @return
     */
    public static int maxArr(int[] arr){
        int max = arr[0];
        for (int i = 1; i < arr.length; i++) {
            if(arr[i]>max){
                max = arr[i];
            }
        }
        return max;

    }

    /**
     * 求数组的最小值
     * @param arr
     * @return
     */
    public static int minArr(int[] arr){
        int min = arr[0];
        for (int i = 1; i < arr.length; i++) {
            if(arr[i]<min){
                min = arr[i];
            }
        }
        return min;
    }


    /**
     * 求数组中的元素的平均值
     * @param arr
     * @return
     */
    public static double avgArr(double[] arr){
        double sum = 0;
        for (int i = 0; i < arr.length; i++) {
            sum+=arr[i];
        }
        return sum / arr.length;
    }



    /**
     * 给定一个数组，传入一个数字，如果在数组中存在这个数字，返回这个数字在数组中的下标，否则返回-1
     * @param arr
     * @return
     */
    public static int arrUtils(int[] arr,int num){
        for (int i = 0; i < arr.length; i++) {
            if(arr[i]==num){
                return i;
            }
        }
        return -1;
    }

    /**
     * 给定一个数组，传入一个字符，如果在数组中存在这个字符，返回这个数字在数组中的下标，否则返回-1
     * @param arr
     * @return
     */
    public static int stringArrUtils(String[] arr,String str){
        for (int i = 0; i < arr.length; i++) {

//            if(arr[i]==null){
//                arr[i]=str;
//            }else if(arr[i].equals(str)){
//                return i;
//            }

            if(str.equals(arr[i])){
                return i;
            }
        }
        return -1;
    }


    /**
     * 拷贝数组
     * @param arr1      原数组
     * @param oldstart  原数组的起始位置
     * @param arr2      新数组
     * @param newstart  新数组的起始位置
     * @param length    拷贝的长度
     */
    public static void copyArr
    (int[] arr1, int oldstart, int[] arr2, int newstart, int length){
        for (int i = oldstart; i < length+oldstart; i++) {
            arr2[newstart++] = arr1[i];
        }
    }


    /**
     * 创建一个新数组,将原数组的元素全copy到新数组中
     * @param arr1  原数组
     * @param lenght 新数组的长度
     */
    public static int[] copyArr(int[] arr1,int lenght){
        int[] arr2 = new int[lenght];
        for (int i = 0; i < arr1.length; i++) {
            arr2[i] = arr1[i];
        }
        return arr2;
    }



    /**
     * 冒泡排序
     * */
    public static void bubbleSort(int[] array) {
        int n = array.length;

        for (int i = 1; i < n ; i++) {
            for (int j = 0; j < n - i ; j++) {
                if (array[j] > array[j + 1]) {
                    // 交换相邻元素的位置
                    int temp = array[j];
                    array[j] = array[j + 1];
                    array[j + 1] = temp;
                }
            }
        }

        ArrUtils.printArrInt(array);
    }
}

